package com.hot100.mid;

/**
 * @author zhengTao
 * @version 1.0
 * @description: 颜色分类
 * @date 2022/8/13 18:33
 */
public class Demo22 {
    public static void main(String[] args) {
     //int[] nums = {2,0,2,1,1,0};
     int[] nums = {2,0,1};
      sortColors1(nums);
    }
    //理解不了
    public static void sortColors(int[] nums) {
        int num0 = 0, num1 = 0, num2 = 0;
        for(int i = 0; i < nums.length; i++) {
            if(nums[i] == 0) {
                nums[num2++] = 2;
                nums[num1++] = 1;
                nums[num0++] = 0;
            }else if(nums[i] == 1) {
                nums[num2++] = 2;
                nums[num1++] = 1;
            }else {
                nums[num2++] = 2;
            }
        }
    }
    //别人的思路，// 双指针，left和right  遍历交换
    //如果等于0，向左交换left,left++，索引加一，如果等于1，直接索引加1，如果等于二，向右交换right,right--，索引不变
    //停止条件。 索引<=right,因为right后面的都已经是2了，取等于号，因为当前这个i还没进行判断，可能出问题
    public static void sortColors1(int[] nums) {
        if(nums.length<=1){
            return;
        }
        int left=0,right=nums.length-1;
        int i=0;  //遍历的索引
        while (i<=right){
            if(nums[i]==0){
                int temp=nums[left];
                nums[left]=0;
                nums[i]=temp;
                left++;
                i++;
            }else if(nums[i]==1){
                i++;
            }else if(nums[i]==2){
                int temp=nums[right];
                nums[right]=2;
                nums[i]=temp;
                right--;
            }
        }
    }

}
